#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//int singleNumber(int* nums, int numsSize) {
//    long ret = 0;
//
//    for (int i = 0; i < 32; i++)
//    {
//        long count = 0;
//        for (int j = 0; j < numsSize; j++)
//        {
//            count += ((nums[j] >> i) & 1);
//        }
//        if (count % 3 != 0)
//            ret |= (1 << i);
//    }
//
//    return ret;
//}
//
//int main()
//{
//    int arr[] = { -2,-2,1,1,4,1,4,4,-4,-2 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    int ret = singleNumber(arr, sz);
//    printf("%d ", ret);
//	return 0;
//}



//int singleNumber(int* nums, int numsSize) {
//    long ret = 0;
//
//    for (int i = 0; i < 32; i++)
//    {
//        long count = 0;
//        for (int j = 0; j < numsSize; j++)
//        {
//            count += ((nums[j] >> i) & 1);
//        }
//        if (count % 3 != 0)
//            ret |= (count % 3) << i;
//    }
//
//    return ret;
//}
//
//int main()
//{
//    int arr[] = { -2,-2,1,1,4,1,4,4,-4,-2 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    int ret = singleNumber(arr, sz);
//    printf("%d ", ret);
//	return 0;
//}


//void once_nums(int* arr, int sz)
//{
//	int i = 0;
//	int ret = 0;
//	for (i = 0; i < sz; i++)
//	{
//		ret ^= arr[i];
//	}
//
//	int pos = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (((ret >> i) & 1) == 1)
//		{
//			pos = i;
//			break;
//		 }
//	}
//
//	int flag1 = 0;
//	int flag2 = 0;
//
//	for (i = 0; i < sz; i++)
//	{
//		if (((arr[i] >> pos) & 1) == 1)
//		{
//			flag1 ^= arr[i];
//		}
//		else
//		{
//			flag2 ^= arr[i];
//		}
//	}
//
//	printf("%d %d \n", flag1, flag2);
//}
//
//int main()
//{
//	int arr[] = { 1,2,2,1,3,4,4,3,6,8 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	once_nums(arr, sz);
//	return 0;
//}


void once_nums(int* arr, int sz,int* flag1, int *flag2)
{
	int i = 0;
	int ret = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}

	int pos = 0;
	for (i = 0; i < 32; i++)
	{
		if (((ret >> i) & 1) == 1)
		{
			pos = i;
			break;
		}
	}

	/*for (i = 0; i < sz; i++)
	{
		if (((arr[i] >> pos) & 1) == 1)
		{
			*flag1 ^= arr[i];
		}
		else
		{
			*flag2 ^= arr[i];
		}
	}*/


	for (int i = 0; i < sz; i++)
	{
		if (((arr[i] >> pos) & 1) == 1)
		{
			*flag1 ^= arr[i];
		}
	}
	*flag2 = ret^ *flag1;
}

int main()
{
	int flag1 = 0;
	int flag2 = 0;
	int arr[] = { 0,-1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	once_nums(arr, sz, &flag1, &flag2);
	printf("%d %d\n", flag1, flag2);
	return 0;
}
